﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DBSystem.Entities;
using DBSystem.BussinessLogic;

using Microsoft.Practices.Unity;       

namespace DBSystem.WebMvc.Controllers
{
    public class ProductosController : Controller
    {
        [Dependency]
        public IProductoBL  ProductoBL { get; set; }

        [Dependency]
        public ICategoriaBL  CategoriaBL { get; set; }

        //
        // GET: /Productos/

        public ActionResult Index(string criterio)
        {

            var lista = ProductoBL.GetAllFromProductoByCriterio(criterio);  
            return View(lista);
        }

        public ActionResult BusquedaPaged(string criterio, Int32? page)
        {
            var pageNumber = page ?? 1;

            ViewBag.criterio = criterio;

            var lista = ProductoBL.GetAllFromProductoByCriterio(criterio, pageNumber, 15);
 
            return View(lista); 
        }

        public ActionResult BusquedaPagedAjax(string criterio, Int32? page)
        {
            var pageNumber = page ?? 1;

            var lista = ProductoBL.GetAllFromProductoByCriterio(criterio, pageNumber, 15);

            return Request.IsAjaxRequest() ? PartialView("_listProductos", lista) as ActionResult : View(lista);
        }

        //
        // GET: /Productos/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Productos/Create

        public ActionResult Create()
        {
            var listCategorias = CategoriaBL.GetAllFromCategoria(); 

            ViewData["CategoriaId"] = new SelectList(listCategorias,"Id","descripcion");
  
            return View();
        } 

        //
        // POST: /Productos/Create

        [HttpPost]
        public ActionResult Create(Producto producto)
        {
            try
            {
                ProductoBL.AddProducto(producto);  
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /Productos/Edit/5
 
        public ActionResult Edit(int id)
        {
            var producto = ProductoBL.GetFromProductoById(id);

            var listCategorias = CategoriaBL.GetAllFromCategoria();

            ViewData["CategoriaId"] = new SelectList(listCategorias, "Id", "descripcion",producto.CategoriaId );

            return View(producto );
        }

        //
        // POST: /Productos/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, Producto producto) 
        {
            try
            {
                // TODO: Add update logic here

                ProductoBL.UpdateProducto(producto);  
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Productos/Delete/5
 
        public ActionResult Delete(int id)
        {
            ProductoBL.RemoveProducto(id);

            return RedirectToAction("Index");
        }

        //
        // POST: /Productos/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
